package Capa_Presentacion;

import java.io.IOException;
import java.io.Serializable;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

import Capa_Datos.CD_Laboratorio;
import Capa_Datos.CD_RegInstalacion;
import Capa_Datos.CD_Software;
import Capa_Negocio.CN_ImplSoftServicio;
import Capa_Negocio.CN_SoftServicio;

public class CP_MantSwLabCntrl implements Serializable{
     
	 private static final long serialVersionUID = 1L;
	
	 private CD_Software software=new CD_Software();
     private CD_Laboratorio laboratorio=new CD_Laboratorio();
     private SelectItem[] listLab;
     private String SoftVer="";
     private List<Integer> CombLab=new ArrayList<Integer>();
     private CD_RegInstalacion reginstalacion;
     private List<String> combSw=new ArrayList<String>();
	private List<CD_RegInstalacion> listReg=new ArrayList<CD_RegInstalacion>();
	private List<CD_RegInstalacion>  filteredlist=new ArrayList<CD_RegInstalacion>();
	private CN_SoftServicio SoftServicio;

     private Date Fecha;
     private int  idInstalacion=0;
   	 private String mensaje="";
 
     
     public CP_MantSwLabCntrl(){
     	SoftServicio=new CN_ImplSoftServicio();  
    	listReg=SoftServicio.inicializarTabla();
    	filteredlist=listReg;
    	combSw=SoftServicio.ListSoftware();
    	CombLab=SoftServicio.inicializarLista();
     	listLab=createFilterOptions(CombLab);   

     }





		public List<String> getCombSw() {
		return combSw;
	}





	public void setCombSw(List<String> combSw) {
		this.combSw = combSw;
	}





		public String getSoftVer() {
		return SoftVer;
	}





	public int getIdInstalacion() {
			return idInstalacion;
		}





		public void setIdInstalacion(int idInstalacion) {
			this.idInstalacion = idInstalacion;
		}





		public void setLaboratorio(CD_Laboratorio laboratorio) {
			this.laboratorio = laboratorio;
		}





		public void setListLab(SelectItem[] listLab) {
			this.listLab = listLab;
		}





	public void setSoftVer(String softVer) {
		SoftVer = softVer;
	}





		public List<CD_RegInstalacion> getFilteredlist() {
		return filteredlist;
	}





	public void setFilteredlist(List<CD_RegInstalacion> filteredlist) {
		this.filteredlist = filteredlist;
	}





		public void setSoftware(CD_Software software) {
		this.software = software;
	}


		public List<Integer> getCombLab() {
		return CombLab;
	}


	public void setCombLab(List<Integer> combLab) {
		CombLab = combLab;
	}


		private SelectItem[] createFilterOptions(List<Integer> list)  {  
            SelectItem[] options = new SelectItem[list.size() + 1];  
      
            options[0] = new SelectItem("","Select");  
            for(int i = 0; i < list.size(); i++) {  
                options[i + 1] = new SelectItem(list.get(i));  
            }  
      
            return options;  
        }  
    	 
     
	public void MetodoPost(){	
		FacesContext context = FacesContext.getCurrentInstance();  
        software=new CD_Software();
        software=SoftServicio.obtenerSW(SoftVer);
    	
    	 if(SoftServicio.ingresarRegInstal(software, laboratorio, Fecha)==1) {
    		 mensaje="Se ha completado el registro";
    		 software=new CD_Software();
    		 SoftVer="";
    		    laboratorio=new CD_Laboratorio();
    		    Fecha=null;
    	 }
         else mensaje="Los datos ingresados son incorrectos";

    	 
    	 context.addMessage(null, new FacesMessage("Mensaje : ", mensaje));
    	
     }
	
	
    
	public String getMensaje() {
		return mensaje;
	}
	
	public void Registrar() throws IOException{
		 FacesContext contex = FacesContext.getCurrentInstance();
		SoftServicio=new CN_ImplSoftServicio();
	    software=new CD_Software();
	    laboratorio=new CD_Laboratorio();
	    Fecha=null;
	    SoftVer="";
	    combSw=SoftServicio.ListSoftware();
	    CombLab=SoftServicio.inicializarLista();
	    listLab=createFilterOptions(CombLab);
		contex.getExternalContext().redirect( "/ProyLabo/faces/view/RegSwLab.xhtml" );
		
	}
	
	
	
	public void Modificar() throws IOException{
		FacesContext context = FacesContext.getCurrentInstance();  

	         
	 	combSw=SoftServicio.ListSoftware();
	 	SoftVer=reginstalacion.getSoftware().getNombre()+" "+reginstalacion.getSoftware().getVersion();
		idInstalacion=reginstalacion.getIdInstalacion();
	
		laboratorio=new CD_Laboratorio();
		laboratorio.setIdLaboratorio(reginstalacion.getLaboratorio().getIdLaboratorio());
		Fecha=reginstalacion.getFecha();
		
		
		
		context.getExternalContext().redirect( "/ProyLabo/faces/view/ModSwLab.xhtml" );
		
	}
	
	public void actualizar() throws IOException{
		
	FacesContext context = FacesContext.getCurrentInstance();  
    software=new CD_Software();
    software=SoftServicio.obtenerSW(SoftVer);
    	
   	 if(SoftServicio.modificarTabla(idInstalacion,software,laboratorio,Fecha)==1) {
   		 mensaje="Se ha modificado correctamente";
         
	     listReg=SoftServicio.inicializarTabla();
	 	filteredlist=listReg;
         reginstalacion=new CD_RegInstalacion();
         CombLab=SoftServicio.inicializarLista();
      	listLab=createFilterOptions(CombLab); 
         software=new CD_Software();
         laboratorio=new CD_Laboratorio();
         Fecha=null;
   	 }
        else mensaje="Los datos ingresados son incorrectos";

   	 
   
   	context.getExternalContext().redirect( "/ProyLabo/faces/view/ConsulSwLab.xhtml");
	context.addMessage(null, new FacesMessage("Mensaje : ", mensaje));
	}

	
	public void Consultar() throws IOException{
		 FacesContext contex = FacesContext.getCurrentInstance();
		SoftServicio=new CN_ImplSoftServicio();
		 software=new CD_Software();
		 laboratorio=new CD_Laboratorio();
		 Fecha=null;
		 listReg=SoftServicio.inicializarTabla();
		 filteredlist=listReg;
		  SoftVer="";
		 CombLab=SoftServicio.inicializarLista();
	     listLab=createFilterOptions(CombLab);  
	
			contex.getExternalContext().redirect( "/ProyLabo/faces/view/ConsulSwLab.xhtml" );
	
		
	}
	
	
	public void cancelar() throws IOException{
		 FacesContext contex = FacesContext.getCurrentInstance();
		SoftServicio=new CN_ImplSoftServicio();
	
		 listReg=SoftServicio.inicializarTabla();
		 	filteredlist=listReg;
	         reginstalacion=new CD_RegInstalacion();
	         SoftVer="";
	 	    combSw=SoftServicio.ListSoftware();
	 	    CombLab=SoftServicio.inicializarLista();
	 	    listLab=createFilterOptions(CombLab);
	   	 software=new CD_Software();
		 laboratorio=new CD_Laboratorio();
	         Fecha=null;
	         
	
			contex.getExternalContext().redirect( "/ProyLabo/faces/view/ConsulSwLab.xhtml" );
			
		
	}
    
     public CD_Software getSoftware() {
 		return software;
 	}
 	public CD_Laboratorio getLaboratorio() {
 		return laboratorio;
 	}
 	
 
 	 public Date getFecha() {
 		return Fecha;
 	}
 	   
 	 public void setFecha(Date fecha) {
 			Fecha = fecha;
 	}
 	 
 
 	 public void eliminar(){
 	FacesContext context = FacesContext.getCurrentInstance();  

    	
   	 if( SoftServicio.limpiarTabla(reginstalacion)==1) {
   		 mensaje="Se ha eliminado correctamente";
              
   		         listReg=SoftServicio.inicializarTabla();
   		         filteredlist=listReg;
                 reginstalacion=new CD_RegInstalacion();
                 CombLab=SoftServicio.inicializarLista();
              	listLab=createFilterOptions(CombLab); 
   		 
   	 }
        else mensaje="Se ha producido un error";

   	 context.addMessage(null, new FacesMessage("Mensaje : ", mensaje));
   
 	 }


 	  public SelectItem[] getListLab() {
 			return listLab;
 		}
 	 public List<CD_RegInstalacion> getListReg() {
 		return listReg;
 	}

     public CD_RegInstalacion getReginstalacion() {
 		return reginstalacion;
 	}

	 public void setReginstalacion(CD_RegInstalacion reginstalacion) {
		this.reginstalacion = reginstalacion;
	}
	 
	 public void setListReg(List<CD_RegInstalacion> listReg) {
			this.listReg = listReg;
		}
	 
	 public void registrarVista(){
		 		 
	 		try {
	 			Registrar();
				
			} catch (IOException e) {
				
				e.printStackTrace();
			}
	 }
	 public void consultarVista(){
		 		 
	 		try {
	 			Consultar();
				
			} catch (IOException e) {
				
				e.printStackTrace();
			}
	 }

}
